﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormAlquilerVenta4 : Form
    {
        private string dni = "";
        static private FormContenedor contenedor;
        static private Alquiler alquiler = new Alquiler();
        private DataSet dsAlquiler;
        private DataSet dsSocio = new DataSet();
        private DataRow socioR;

        private Socio socio = new Socio();

        //private int numeroDePaginaActual = 0;
        //private int numeroDePaginasMaximo;
       // private const int numeroDeJuegosPorPagina = 10;

        private Factura factura = new Factura();
        private LineaFactura lineaFactura = new LineaFactura();
        private CopiaFisica copia = new CopiaFisica();

        public FormAlquilerVenta4()
        {
            InitializeComponent();
        }

        public void Iniciar(string argDni)
        {
            dni = argDni;
            MostrarTodos();
            CargarDatosCliente();
        }

        private void FormAlquilerVenta4_Load(object sender, EventArgs e)
        {
            try
            {
                tbTotal.Enabled = false;
                contenedor = (FormContenedor)MdiParent;
                dsAlquiler = new DataSet();

                //numeroDePaginaActual = 1;

                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void MostrarTodos()
        {
            try
            {
                //numeroDePaginaActual = 1;
                CargarDataGridViewAlquiler();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewAlquiler()
        {
            bool cambiado = false;
            decimal total = 0;
            try
            {
                /*if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(alquiler.NumeroAlquileresConPromociones().ToString()) / numeroDeJuegosPorPagina).ToString());
                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;
                */
                //dsAlquiler = alquiler.AlquileresConPromociones(numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                dsAlquiler = alquiler.AlquileresConPromociones();
                dgCarro.DataSource = dsAlquiler;
                dgCarro.DataMember = "AlquileresConPromociones";
                //lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();

                foreach(DataGridViewRow row in dgCarro.Rows)
                {
                    //SI CONTIENE UN 2X1
                    if (row.Cells["Promocion"].Value.ToString() == "2X1" && row.Cells["DescuentoPorcentaje"].Value.ToString() == "0,00" && row.Cells["Total"].Value.ToString() == "")
                    {

                        cambiado = false;
                        row.Cells["Total"].Value = row.Cells["Precio"].Value;

                        foreach (DataGridViewRow row2 in dgCarro.Rows)
                        {
                            
                            if (!cambiado)
                            {
                                if (row2.Cells["Nombre"].Value.ToString() == row.Cells["Nombre"].Value.ToString() && row2.Cells["Plataforma"].Value.ToString() == row.Cells["Plataforma"].Value.ToString()
                                    && row2.Cells["Promocion"].Value.ToString() == "2X1" && row2.Cells["Total"].Value.ToString() == "" && row2.Cells["Tipo"].Value.ToString() == row.Cells["Tipo"].Value.ToString())
                                {
                                    row2.Cells["DescuentoPorcentaje"].Value = "100";
                                    row2.Cells["DescuentoEuros"].Value = row2.Cells["Precio"].Value;
                                    row2.Cells["Total"].Value = "0";
                                    cambiado = true;
                                }
                            }
                        }
                    }
                    //SI CONTIENE UN DESCUENTO EN €
                    else if (row.Cells["Promocion"].Value.ToString() == "Descuento en €")
                    {
                        if (decimal.Parse(row.Cells["DescuentoEuros"].Value.ToString()) < decimal.Parse(row.Cells["Precio"].Value.ToString()))
                        {
                            row.Cells["DescuentoPorcentaje"].Value = ((1-(decimal.Parse(row.Cells["DescuentoEuros"].Value.ToString()) / (decimal.Parse(row.Cells["Precio"].Value.ToString())))) * 100);
                            row.Cells["Total"].Value = decimal.Parse(row.Cells["Precio"].Value.ToString()) - decimal.Parse(row.Cells["DescuentoEuros"].Value.ToString());
                        }
                        else
                        {
                            row.Cells["DescuentoPorcentaje"].Value = 100;
                            row.Cells["Total"].Value = 0;
                        }
                        
                    }
                    //SI CONTIENE UN DESCUENTO EN %
                    else if (row.Cells["Promocion"].Value.ToString() == "Descuento en %")
                    {
                        if (decimal.Parse(row.Cells["DescuentoPorcentaje"].Value.ToString()) < 100)
                        {
                            row.Cells["DescuentoEuros"].Value = (decimal.Parse(row.Cells["Precio"].Value.ToString()) * ((decimal.Parse(row.Cells["DescuentoPorcentaje"].Value.ToString())) / 100));
                            row.Cells["Total"].Value = decimal.Parse(row.Cells["Precio"].Value.ToString()) - decimal.Parse(row.Cells["DescuentoEuros"].Value.ToString());
                        }
                        else
                        {
                            row.Cells["DescuentoEuros"].Value = 0;
                            row.Cells["Total"].Value = row.Cells["Precio"].Value;
                        }
                    }
                    //SI NO TIENE DESCUENTO
                    else if (row.Cells["Promocion"].Value.ToString() == "Ninguna")
                    {
                        row.Cells["DescuentoPorcentaje"].Value = 0;
                        row.Cells["DescuentoEuros"].Value = 0;
                        row.Cells["Total"].Value = row.Cells["Precio"].Value;
                    }
                }

                foreach (DataGridViewRow row in dgCarro.Rows)
                {
                    total += decimal.Parse(row.Cells["Total"].Value.ToString());
                }
                tbTotal.Text = total.ToString();
                tbCantidadEntregada.Text = total.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDatosCliente()
        {
            bool consulta = false;
            try
            {
                dsSocio = socio.ObtenerDatosSocio(dni);
                if (dsSocio.Tables.Count > 0)
                {
                    foreach (DataRow row in dsSocio.Tables["DatosSocio"].Rows)
                    {
                        consulta = true;
                        socioR = row;

                        lbNombre.Text = "Nombre: " + socioR["Nombre"].ToString();
                        lbApellidos.Text = "Apellidos: " + socioR["Apellidos"].ToString();
                        lbDNI.Text = "DNI: " + dni;
                        lbCP.Text = "CP: " + socioR["CP"].ToString();
                        lbLocalidad.Text = "Localidad: " + socioR["Localidad"].ToString();
                        lbProvincia.Text = "Provincia: " + socioR["Provincia"].ToString();
                        lbDireccion.Text = "Dirección: " + socioR["Direccion"].ToString();
                    }
                }

                if (!consulta)
                {
                    MessageBox.Show("No existe ningun usuario con el DNI " + dni, "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btAceptar_Click(object sender, EventArgs e)
        {
            decimal deuda = 0;
            try
            {
                deuda = decimal.Parse(tbTotal.Text.ToString()) - decimal.Parse(tbCantidadEntregada.Text.ToString());
                //AÑADIR DEUDA SI LA HAY
                if(deuda > 0)
                {
                        socio.SumarADeuda(deuda, dni);
                }
                //CREAR NUEVA FACTURA
                factura.CantEntrega = decimal.Parse(tbCantidadEntregada.Text.ToString());
                factura.DNISocio = dni;
                factura.Fecha = DateTime.Now;

                factura.NuevaFactura();

                
                foreach (DataGridViewRow row in dgCarro.Rows)
                {
                    //CREAR LINEAS DE FACTURA
                    lineaFactura.Descuento = decimal.Parse(row.Cells["DescuentoEuros"].Value.ToString());
                    lineaFactura.NumCopia = row.Cells["Codigo"].Value.ToString();
                    lineaFactura.NumPedido = factura.NumeroUltimaFactura().ToString();

                    lineaFactura.NuevaLineaFactura();

                    //PONER JUEGOS DE ALQUILER EN ESTADO ALQUILADO
                    if (row.Cells["Tipo"].Value.ToString() == "Alquiler")
                    {
                        copia.SetCopiaAlquilada(row.Cells["Codigo"].Value.ToString(), dni);
                    }

                    //QUITAR JUEGOS NUEVOS Y 2ª MANO DE LA LISTA DE JUEGOS
                    else if (row.Cells["Tipo"].Value.ToString() == "Nuevo" || row.Cells["Tipo"].Value.ToString() == "2ª Mano")
                    {
                        copia.SetCopiaVendida(row.Cells["Codigo"].Value.ToString(), dni, row.Cells["Total"].Value.ToString());
                    }
                }
                MessageBox.Show("Compra realizada con exito.", "Compra", MessageBoxButtons.OK, MessageBoxIcon.Information);
                contenedor.hijoFormAlquilerVenta.MostrarTodos();
                contenedor.hijoFormMenuPrincipal.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btVolver_Click(object sender, EventArgs e)
        {
            FormAlquilerVenta3 AlquilerVenta3 = new FormAlquilerVenta3();
            this.Hide();
            AlquilerVenta3.ShowDialog();
            this.Show();
        }
        /*
        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewAlquiler();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewAlquiler();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewAlquiler();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewAlquiler();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        */
        private void btVolver_Click_1(object sender, EventArgs e)
        {
            contenedor.hijoFormAlquilerVenta3.Focus();
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            contenedor.hijoFormAlquilerVenta.MostrarTodos();
            contenedor.hijoFormMenuPrincipal.Focus();
        }

        private void tbCantidadEntregada_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if(decimal.Parse(tbCantidadEntregada.Text.ToString())>decimal.Parse(tbTotal.Text.ToString()))
                {
                    MessageBox.Show("La cantidad entregada no puede ser mayor que el total de la factura.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tbCantidadEntregada.Text = tbTotal.Text.ToString(); 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
